home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1997
/
MacHack 1997.toast
/
Hacks
/
Hacks ’96
/
Adobe Illustrator Plug-ins
/
AIQuickCapture Project
/
source
/
quickcapture.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-06-22
|
8KB
|
420 lines
/* ---------------------------------------------------------------------------
quickcam capture.c
Copyright (c) 1995-6 Adobe Systems Incorporated
All Rights Reserved
--------------------------------------------------------------------------- */
/**-----------------------------------------------------------------------------
**
** Imports
**
**/
#include "common.h"
/**-----------------------------------------------------------------------------
**
** Variables and declarations
**
**/
typedef struct {
char *name;
long version;
void **suite;
} ImportBunch;
typedef struct {
char *name;
long version;
} ExportBunch;
Globals *g;
// Add the properties to import here
ImportBunch imports[] = {
kAIBlockSuite, kAIBlockVersion, &sBlock,
kAIMenuSuite, kAIMenuVersion, &sMenu,
kAIMacMenuSuite, kAIMacMenuVersion, &sMacMenu,
kAIMacUserSuite, kAIMacUserVersion, &sMacUser,
kAIFixedMathSuite, kAIFixedMathVersion, &sMath,
kAIArtSuite, kAIArtVersion, &sArt,
kAIRasterSuite, kAIRasterVersion, &sRaster,
kAIDocumentViewSuite, kAIDocumentViewVersion2, &sDocumentView,
};
ExportBunch exports[] = {
"hide windows", 1
};
AIBlockSuite *sBlock;
AIMenuSuite *sMenu;
AIMacMenuSuite *sMacMenu;
AIMacUserSuite *sMacUser;
AIFixedMathSuite *sMath;
AIArtSuite *sArt;
AIRasterSuite *sRaster;
AIDocumentViewSuite2 *sDocumentView;
#include "menuHandler.h"
/**-----------------------------------------------------------------------------
**
** Forward Functions
**
**/
static FXErr AcquireProperty( AIPropertyMessage *message );
static FXErr ReleaseProperty( AIPropertyMessage *message );
static FXErr StartupPlugin( AIPluginMessage *message );
static FXErr UnloadPlugin( AIPluginMessage *message );
static FXErr ReloadPlugin( AIPluginMessage *message );
static FXErr ShutdownPlugin( AIPluginMessage *message );
static FXErr AboutPlugin( AIPluginMessage *message );
/*******************************************************************************
**
** Exported Functions
**
**/
FXErr main( char *selector, void *message );
FXErr main( char *selector, void *message ) {
PUSH_GLOBALS
FXErr error = kNoErr;
// standard messages
if ( strcmp( selector, kSelectorAIAcquireProperty ) == 0 )
error = AcquireProperty( message );
else if ( strcmp( selector, kSelectorAIReleaseProperty ) == 0 )
error = ReleaseProperty( message );
else if ( strcmp( selector, kSelectorAIUnloadPlugin ) == 0 )
error = UnloadPlugin( message );
else if ( strcmp( selector, kSelectorAIReloadPlugin ) == 0 )
error = ReloadPlugin( message );
else if ( strcmp( selector, kSelectorAIShutdownPlugin ) == 0 )
error = ShutdownPlugin( message );
else {
error = acquireSuites( ((AIPluginMessage*)message)->d.basic );
if ( error )
goto error;
if ( strcmp( selector, kSelectorAIStartupPlugin ) == 0 )
error = StartupPlugin( message );
else if ( strcmp( selector, kSelectorAIAboutPlugin ) == 0 )
error = AboutPlugin( message );
// other messages
else if ( strcmp( selector, kSelectorAIGoMenuItem ) == 0 )
error = goMenuItem( message );
releaseSuites( ((AIPluginMessage*)message)->d.basic );
}
error:
POP_GLOBALS
return error;
}
static FXErr StartupPlugin ( AIPluginMessage *message ) {
FXErr error = kNoErr;
error = sBlock->AllocateBlock( sizeof(Globals), &g );
if ( error )
goto error;
GetIndString( g->menuText, 16000, 1 ); // get the menu text
addMyMenus( (AIMenuMessage*)message );
error:
return error;
}
static FXErr UnloadPlugin( AIPluginMessage *message ) {
CloseVideo();
message->d.globals = g;
return kNoErr;
}
static FXErr ReloadPlugin( AIPluginMessage *message ) {
g = message->d.globals;
InitializeVideo();
return kNoErr;
}
static FXErr ShutdownPlugin( AIPluginMessage *message ) {
FXErr error = kNoErr;
error:
return error;
}
/**-----------------------------------------------------------------------------
**
** Suite Functions
**
**/
extern FXErr acquireSuites( AIBasicSuite *sBasic ) {
FXErr error = kNoErr;
long i;
for ( i = 0; i < sizeof(imports)/sizeof(imports[0]); ++i ) {
if ( imports[i].suite != NULL ) {
error = sBasic->AcquireSuite( imports[i].name, imports[i].version, imports[i].suite );
if ( error )
goto error;
}
}
error:
return error;
}
extern FXErr releaseSuites( AIBasicSuite *sBasic ) {
FXErr error = kNoErr;
long i;
for ( i = 0; i < sizeof(imports)/sizeof(imports[0]); ++i ) {
void **procs = imports[i].suite;
if ( procs != NULL && *procs != NULL ) {
error = sBasic->ReleaseSuite( *procs );
if ( error )
goto error;
*procs = NULL;
}
}
error:
return error;
}
/**-----------------------------------------------------------------------------
**
** Other Functions
**
**/
static FXErr AboutPlugin( AIPluginMessage *message ) {
FXErr error = kNoErr;
Alert( 16000, (ModalFilterUPP)sMacUser->ModalFilterProc );
error:
return error;
}
extern void pstrcopy( unsigned char *from, unsigned char *to ) {
short i;
for(i=0;i<=from[0];i++) {
to[i] = from[i];
}
}
////////////////////////
static FXErr AcquireProperty( AIPropertyMessage *message ) {
if ( message->vendorID == 'ADBE' &&
message->propertyKey == 'impt' ) {
long count, i, datalen;
long strsize;
char *property;
strsize = 0;
count = sizeof(imports)/sizeof(imports[0]);
for ( i = 0; i < count; ++i ) {
long len;
len = strlen( imports[i].name ) + 1;
if ( len & 3 )
len += 4 - (len & 3);
strsize += len;
}
datalen = 4 + strsize + count * 8;
property = NewPtrClear( 16 + datalen );
if ( property == NULL )
goto error;
message->property = property;
message->refCon = 0;
*(OSType *) property = 'ADBE'; // vendor ID
property += 4;
*(OSType *) property = 'impt'; // property key
property += 4;
*(long *) property = 0; // property ID
property += 4;
*(long *) property = datalen; // data len
property += 4;
*(long *) property = count;
property += 4;
for ( i = 0; i < count; ++i ) {
long len;
len = strlen( imports[i].name ) + 1;
if ( len & 3 )
len += 4 - (len & 3);
*(long *) property = len + 4;
property += 4;
strcpy( property, imports[i].name );
property += len;
*(long *) property = imports[i].version;
property += 4;
}
} else if ( message->vendorID == 'ADBE' &&
message->propertyKey == 'expt' ) {
long count, i, datalen;
long strsize;
char *property;
strsize = 0;
count = sizeof(exports)/sizeof(exports[0]);
for ( i = 0; i < count; ++i ) {
long len;
len = strlen( exports[i].name ) + 1;
if ( len & 3 )
len += 4 - (len & 3);
strsize += len;
}
datalen = 4 + strsize + count * 8;
property = NewPtrClear( 16 + datalen );
if ( property == NULL )
goto error;
message->property = property;
message->refCon = 0;
*(OSType *) property = 'ADBE'; // vendor ID
property += 4;
*(OSType *) property = 'expt'; // property key
property += 4;
*(long *) property = 0; // property ID
property += 4;
*(long *) property = datalen; // data len
property += 4;
*(long *) property = count;
property += 4;
for ( i = 0; i < count; ++i ) {
long len;
len = strlen( exports[i].name ) + 1;
if ( len & 3 )
len += 4 - (len & 3);
*(long *) property = len + 4;
property += 4;
strcpy( property, exports[i].name );
property += len;
*(long *) property = exports[i].version;
property += 4;
}
}
error:
return kNoErr;
}
static FXErr ReleaseProperty( AIPropertyMessage *message ) {
DisposePtr( message->property );
return kNoErr;
}